package com.hq.ims.data.utils;

import com.hq.ims.data.annotation.CompareField;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

public class ObjectComparatorUtil {

    public static Map<String, String> compare(Object oldObj, Object newObj) {
        Map<String, String> result = new HashMap<>();

        try {
            // 获取所有字段
            Field[] fields = oldObj.getClass().getDeclaredFields();

            // 遍历所有字段
            for (Field field : fields) {
                // 如果字段被 @CompareField 注解标注
                if (field.isAnnotationPresent(CompareField.class)) {
                    // 获取字段的中文名
                    String fieldName = field.getAnnotation(CompareField.class).value();

                    // 设置字段可访问
                    field.setAccessible(true);

                    // 获取字段的旧值和新值
                    Object oldValue = field.get(oldObj);
                    Object newValue = field.get(newObj);

                    // 如果值不相等
                    if (!Objects.equals(oldValue, newValue)) {
                        // 将字段名和值添加到结果中
                        result.put(fieldName, oldValue + "_" + newValue);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }

}
